NewGridIntegerFromESRI_BINARY Subroutine

private subroutine NewGridIntegerFromESRI_BINARY(fileName, layer)

Uses

read a integer grid from a ESRI BINARY file.

Arguments

Type IntentOptional Attributes Name
character(len=*), intent(in) :: fileName

file to read

type(grid_integer), intent(out) :: layer

returned grid float


Variables

Type Visibility Attributes Name Initial
character(len=50), public :: dummy
integer(kind=short), public :: fileUnit
integer(kind=short), public :: i
integer(kind=short), public :: ios
integer(kind=short), public :: j
integer(kind=short), public :: recordLength
integer(kind=short), public :: recordNumber

Source Code

SUBROUTINE NewGridIntegerFromESRI_BINARY &
!
(fileName, layer)

USE Utilities, ONLY: &
!Imported routines:
GetUnit

IMPLICIT NONE

!Arguments with intent(in):
CHARACTER (LEN = *), INTENT(in) :: fileName  !! file to read

!Arguments with intent(out)
TYPE (grid_integer), INTENT (OUT) :: layer !!returned grid float

!Local variables:
INTEGER (KIND = short)          :: fileUnit
INTEGER (KIND = short)          :: ios
CHARACTER (LEN = 50)            :: dummy
INTEGER (KIND = short)          :: recordLength 
INTEGER (KIND = short)          :: recordNumber
INTEGER (KIND = short)          :: i, j
!------------end of declaration------------------------------------------------

!open file
fileUnit = GetUnit ()

OPEN (UNIT = fileUnit, file = TRIM(fileName) // '.hdr', &
      STATUS = 'OLD', IOSTAT = ios)
IF (ios /= 0) THEN
  CALL Catch ('error', 'GridLib',        &
              'error opening file: ',    &
              code = openFileError, argument = TRIM(fileName) // '.hdr' )
END IF

!read number of columns
READ (fileUnit,*,IOSTAT = ios) dummy, layer % jdim
IF (ios /= 0) THEN
  CALL Catch ('error', 'GridLib',        &
              'error reading columns in file: ',    &
              code = genericIOError, argument = TRIM(fileName) // '.hdr' )
END IF

!read number of rows
READ (fileUnit,*,IOSTAT = ios) dummy, layer % idim
IF (ios /= 0) THEN
  CALL Catch ('error', 'GridLib',        &
              'error reading rows in file: ',    &
              code = genericIOError, argument = TRIM(fileName) // '.hdr' )
END IF

!read xll corner
READ (fileUnit,*,IOSTAT = ios) dummy, layer % xllcorner
IF (ios /= 0) THEN
  CALL Catch ('error', 'GridLib',        &
              'error reading xll in file: ',    &
              code = genericIOError, argument = TRIM(fileName) // '.hdr' )
END IF

!read yll corner
READ (fileUnit,*,IOSTAT = ios) dummy, layer % yllcorner
IF (ios /= 0) THEN
  CALL Catch ('error', 'GridLib',        &
              'error reading yll in file: ',    &
              code = genericIOError, argument = TRIM(fileName) // '.hdr' )
END IF

!read cellsize
READ (fileUnit,*,IOSTAT = ios) dummy, layer % cellsize
IF (ios /= 0) THEN
  CALL Catch ('error', 'GridLib',        &
              'error reading cellsize in file: ',    &
              code = genericIOError, argument = TRIM(fileName) // '.hdr' )
END IF

!read nodata value
READ (fileUnit,*,IOSTAT = ios) dummy, layer % nodata
IF (ios /= 0) THEN
  CALL Catch ('error', 'GridLib',        &
              'error reading missing value in file: ',    &
              code = genericIOError, argument = TRIM(fileName) // '.hdr' )
END IF

!allocate grid
ALLOCATE ( layer % mat (layer % idim, layer % jdim), STAT = ios )
IF (ios /= 0) THEN
  CALL Catch ('error', 'GridLib',  &
             'memory allocation ',  &
             code = memAllocError,argument = fileName )
ENDIF

CLOSE (fileUnit)

fileUnit = GetUnit ()
INQUIRE (IOLENGTH = recordLength) 100_long

OPEN (UNIT = fileUnit, file = TRIM(fileName) // '.flt', &
      FORM = 'UNFORMATTED', ACCESS = 'DIRECT', RECL = recordLength, &
      STATUS = 'OLD', IOSTAT = ios)
IF (ios /= 0) THEN
  CALL Catch ('error', 'GridLib',        &
              'error opening file: ',    &
              code = openFileError, argument = TRIM(fileName) // '.flt' )
END IF

!read data
recordNumber = 0
DO i = 1,layer % idim
  DO j = 1, layer % jdim
    recordNumber = recordNumber + 1
    READ (fileUnit,REC = recordNumber) layer % mat (i,j)
  END DO
END DO

CLOSE (fileUnit)

!Set other fields to default
layer % standard_name = ''
layer % long_name = ''
layer % units = ''
layer % varying_mode = 'sequence' 
layer % valid_min = layer % nodata
layer % valid_max = layer % nodata
layer % esri_pe_string = ''
layer % reference_time = timeDefault
layer % current_time = timeDefault
layer % next_time = timeDefault

END SUBROUTINE NewGridIntegerFromESRI_BINARY